package com.lanxin.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author cyh
 * @create 2025-09-29 10:23
 */

@Component
public class JwtUtil {

    private static final String SECRET_KEY = "lanxin";// your-secret-key应该从配置文件读取
    private static final long EXPIRATION = 86400000; // 24小时

    public String generateToken(String userId, String userName) {

        Map<String, Object> claims = new HashMap<>();
        claims.put("userId", userId);
        claims.put("userName", userName);
        // 添加其他用户信息:put("role", "USER");

        return Jwts.builder()
                .setClaims(claims)
                .setSubject("User Details")
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION))
                .signWith(SignatureAlgorithm.HS512, SECRET_KEY)
                .compact();
    }

    public String getUserNameFromToken(String token) {
        Claims claims = Jwts.parser() // 解析
                .setSigningKey(SECRET_KEY) // 设置密钥(会自动推断算法)
                .parseClaimsJws(token) // 设置要解析的 Token
                .getBody();// 获取有效载荷中的声明
        return claims.get("userName").toString();
    }

    public String getUserIdFromToken(String token) {
        Claims claims = Jwts.parser() // 解析
                .setSigningKey(SECRET_KEY) // 设置密钥(会自动推断算法)
                .parseClaimsJws(token) // 设置要解析的 Token
                .getBody();// 获取有效载荷中的声明
        return claims.get("userId").toString();
    }


    public static boolean validateToken(String token) {
        try {
            Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

}
